// --------------------------------------------------------------------------------------------------------------------
// <copyright file="OTCtl.cs" company="Open Trader">
//   Copyright (c) David Denis (david.denis@systemathics.com)
// </copyright>
// <summary>
//   |  Open Trader - The Open Source Systematic Trading Platform
//   |
//   |  This program is free software: you can redistribute it and/or modify
//   |  it under the terms of the GNU General Public License as published by
//   |  the Free Software Foundation, either version 2 of the License, or
//   |  (at your option) any later version.
//   |
//   |  This program is distributed in the hope that it will be useful,
//   |  but WITHOUT ANY WARRANTY; without even the implied warranty of
//   |  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//   |  GNU General Public License for more details.
//   |
//   |  You should have received a copy of the GNU General Public License
//   |  along with this program.  If not, see http://www.gnu.org/licenses
//   |
//   |  Up to date informations about Open Trader can be found at :
//   |    http://opentrader.org
//   |    http://opentrader.codeplex.com
//   |
//   |  For professional services, please visit us at :
//   |    http://www.systemathics.com
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Org.OpenTrader.Framework.Executables.OTCtl
{
    #region Using Directives

    using System;
    using System.Globalization;
    using System.Reflection;
    using System.Threading;

    using Enums;

    #endregion

    /// <summary>
    /// OTCtl, Open Trader Control (Console)
    /// </summary>
    public class OTCtl
    {
        private static readonly Identity Identity = Identity.Create(System.Reflection.MethodBase.GetCurrentMethod());

        #region Public Methods

        /// <summary>
        /// Entry point of any Open Trader application
        /// </summary>
        /// <param name="cmdlineArgs">
        /// The commande line to parse
        /// </param>
        [STAThread]
        public static void Main(string[] cmdlineArgs)
        {
            try
            {
                OT.Open();
                Logging.Log(Identity, ELogLevel.Info, () => string.Format("Starting {0} {1}", Assembly.GetExecutingAssembly().Location, string.Join(" ", cmdlineArgs)));

                CommandLine.CommandLine.Process(cmdlineArgs);
            }
            catch (Exception e)
            {
                Console.Out.WriteLine(e);
            }
            finally
            {
                OT.Close();
            }
        }

        #endregion
    }
}